
package Almacenamiento;

//import Demo.Agenda;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author EdisonPC
 */
public class GestorPaginas {
    private String nombrearchivo;
    private int numeroPaginas;
    //GestorIOTupla gestor;
    
    public GestorPaginas(String nombre){
        this.nombrearchivo=nombre;
        this.numeroPaginas=0;
    }

    public int getNumeroPaginas() {
        return numeroPaginas;
    }

    public void setNumeroPaginas(int numeroPaginas) {
        this.numeroPaginas = numeroPaginas;
    }
    
    public void EscribirPagina(Pagina pagina){
        try{
            //crear el archivo
            FileOutputStream fs = new FileOutputStream(nombrearchivo);
            //esta clase tiene el metodo writeobject()
            ObjectOutputStream os = new ObjectOutputStream(fs);
            //el metodo de writeobject serializa el objeto y lo escribe en el archivo
            os.writeObject(pagina);
           
            //cerrar el archivo
            os.close();
        }
        catch (FileNotFoundException e){e.printStackTrace();}
        catch (IOException e){e.printStackTrace();}
    }
    
    public void LeerPagina(int numeroPagina){
        try{
            Pagina p=null;
            //para abrir o recuperar un archivo de disco
            FileInputStream fis = new FileInputStream(nombrearchivo);
            ObjectInputStream ois = new ObjectInputStream(fis);
            //readobject recupera el objeto
            p = (Pagina) ois.readObject();
            //a2 = (Agenda) ois.readObject();
            ois.close();
        }
        catch(FileNotFoundException e){e.printStackTrace();}
        catch(IOException e){e.printStackTrace();}
        catch(ClassNotFoundException e){e.printStackTrace();}
    }
    
    public static void main(String args[]) {
        try {
            
            
            List<Atributo> attrs = new ArrayList<Atributo>();
            attrs.add(new Atributo("character", Character.class));
            attrs.add(new Atributo("byte", Byte.class));
            attrs.add(new Atributo("short", Short.class));
            attrs.add(new Atributo("integer", Integer.class));
            attrs.add(new Atributo("long", Long.class));
            attrs.add(new Atributo("float", Float.class));
            attrs.add(new Atributo("double", Double.class));
            attrs.add(new Atributo("string", String.class));
            Relacion rel = new Relacion(attrs);

            List<Comparable> v = new ArrayList<Comparable>();
            v.add(new Character('a'));
            v.add(new Byte((byte) 26));
            v.add(new Short((short) 312));
            v.add(new Integer(2048));
            v.add(new Long(34567));
            v.add(new Float(12.3));
            v.add(new Double(25.6));
            v.add(new String("bla bla"));
            
            List<Comparable> v1 = new ArrayList<Comparable>();
            v1.add(new Character('b'));
            v1.add(new Byte((byte) 30));
            v1.add(new Short((short) 315));
            v1.add(new Integer(2050));
            v1.add(new Long(34587));
            v1.add(new Float(15.3));
            v1.add(new Double(30.6));
            v1.add(new String("bla bla"));
            
            Tupla t = new Tupla(new IdentificadorTupla("redes", 0), v);
            Tupla t1 = new Tupla(new IdentificadorTupla("redes", 1), v1);
            Tupla t2 = new Tupla(new IdentificadorTupla("redes", 2), v);
            
            List<Tupla> lis = new ArrayList<Tupla>();
            lis.add(t);
            lis.add(t1);
            lis.add(t2);
           
            GestorIOTupla gestor = new GestorIOTupla(rel, "redes");
            
            System.out.println("writing tuple..." + t);
            System.out.println("writing tuple..." + t1);
            System.out.println("writing tuple..." + t2);
            byte[] bytes = new byte[4096];
            //man.escribirTupla(t, raf);
            gestor.escribirnTuplas(bytes,0,lis,lis.size());
            try{
            FileOutputStream fs = new FileOutputStream("arch.ser");
            ObjectOutputStream os = new ObjectOutputStream(fs);
            os.writeObject(bytes);
            os.close();
        }
        catch (FileNotFoundException e){e.printStackTrace();}
        catch (IOException e){e.printStackTrace();}
            byte[] bit = null;
             try{
            FileInputStream fis = new FileInputStream("arch.ser");
            ObjectInputStream ois = new ObjectInputStream(fis);
            bit = (byte[]) ois.readObject();
            ois.close();
        }
        catch(FileNotFoundException e){e.printStackTrace();}
        catch(IOException e){e.printStackTrace();}
        catch(ClassNotFoundException e){e.printStackTrace();}
            System.out.println(bit);
          System.out.println("Mostrar arreglo de bytes"+bit);
            List<Par> tuplas = gestor.leernTuplas(bit,0,lis.size());
            //Par<Tupla, Integer> st = man.leernTuplas(bit,0,2);
            for (int i = 0;i<3;i++){System.out.println(tuplas.get(i));}
        } catch (Exception e) {
            System.err.println("Exception: " + e.getMessage());
            e.printStackTrace(System.err);
        }
    } // main()
}
